package Concorrentes;

public class Guarda implements Runnable {

	private int id;
	private int trecho;
	
	public Guarda(int id, int trecho) {
		this.trecho = trecho;
		this.id = id;
	}
	
	public int getTrecho(){
		return this.trecho;
	}
	
	public int getId(){
		return id;
	}
	
	public void run() {
		while( !Controlador.fimDaSimulacao() || Controlador.temCarrosSubindoSerra()  ){
			
			// Come rosquinhas, desatento ao transito e os carros
			comeRosquinhas();
			
			// Resolve parar um carro
			apurrinhaUmCarro();
			
		}
	}

	private void apurrinhaUmCarro() {
		int carroEscolhido = (int)(Math.random()*(Controlador.getNumeroCarros() - 1) + 1);
		
		// Se o carro ainda não está no acostamento
		if(!Controlador.isCarroNoAcostamento(carroEscolhido)){
			
			Controlador.paraCarroAcostamento(carroEscolhido);
			
			procuraIrregularidades();
			
			// Libera o carro
			Controlador.liberaCarroAcostamento(carroEscolhido);
		}
	}

	private void procuraIrregularidades() {
		// Na verdade, ele simplesmente finge que está se comunicando
		// com a base e fazendo coisas importantes, mas está comendo rosquinhas
		comeRosquinhas();
	}

	private void comeRosquinhas() {
		try {
			Thread.sleep((int)(Math.random()*10000));
		} catch (InterruptedException e) {
		}
	}

}
